昨天我們使用了 Quick Reply 讓使用者可直接跟我們回應的訊息互動,今天要使用 Template Message 做一個在互動上也蠻常見的功能 - 同意服務條款。
現在的驗證碼小幫手需要紀錄使用者是否 1. 已認證 2. 已同意條款,而且之後也需要取得 User Profile 等資訊,勢必要新增一張資料表紀錄 User 資訊方便更新及檢閱。
users
在原本的 auto-get-verification-code
試算表新增一張工作表 users
,並加入標題列如下:
目的是在原先的流程上加入同意條款的功能,時間點可以視情況選擇在身份認證之前或之後,這次先選擇在身份認證之後。所以流程大致如下:
users
sheet 寫入 user_id
跟 is_verified
欄位handleMessageEvent
agree_terms
寫入 1首先我們要新增對 users sheet 執行 query & upsert 的功能
加入 upsertUserInfo
& getUserRowIndex
getUserRowIndex
尋找 users sheet 裡面是否已經有這個 userId,有的話回傳列號,沒有的話就在最後新增一列這個 userId 的資料並回傳列號upsertUserInfo
則是根據輸入的 userData object 執行對應 columnname 的資料更新function upsertUserInfo(userId, userData) {
Logger.log('start upsertUserInfo');
var fillableKeys = {
'name':1,
'email':2,
'is_verifed':3,
'agree_terms':4,
'updated_at':6
}
var sheet = ReadMailAndInsertToGoogleSheet.connectToSheet('users');
var userRowIndex = getUserRowIndex(sheet, userId);
var userRowRange = sheet.getRange(userRowIndex, 1, 1, 7);
var userRowData = userRowRange.getValues()[0];
Object.entries(userData).forEach(([key, value]) => {
if (fillableKeys[key] !== undefined) {
userRowData[fillableKeys[key]] = value;
}
});
userRowData[6] = new Date();
userRowRange.setValues([userRowData]);
}
function getUserRowIndex(userSheet, userId) {
var searchResult = ReadMailAndInsertToGoogleSheet.searchColumnValue(userSheet, 'user_id', userId);
if (searchResult !== -1) {
return searchResult+2;
}
// create new user row
var lastRow = userSheet.getLastRow();
var range = userSheet.getRange(++lastRow, 1, 1, 6);
range.setValues([[userId,,,,, new Date()]]);
return lastRow;
}
接著在 tagVerificationCode
裡新增紀錄 user 已經認證的功能
function tagVerificationCode(target, userId) {
var sheet = ReadMailAndInsertToGoogleSheet.connectToSheet('verification_code');
var searchResult = ReadMailAndInsertToGoogleSheet.searchColumnValue(sheet, 'code', target);
if (searchResult !== -1) {
var targetRowIndex = searchResult+2;
var userIdValue = sheet.getRange(targetRowIndex, 2, 1, 1).getValue();
if (userIdValue.length === 0) {
var targetRange = sheet.getRange((searchResult+2), 2, 1, 2);
targetRange.setValues([[userId, new Date()]]);
// 加入下面這行
upsertUserInfo(userId, {'is_verifed': true});
return true;
}
}
return false;
}
這樣一來我們就可以在使用者認證時紀錄資訊在 users sheet,並且可以用同樣的方式紀錄接下來的同意條款結果,明天繼續完成用 Template Message 發送同意條款資訊,以及寫入 users sheet!